package cap

import (
	"lib/structs/base"
	"lib/structs/tables"
	"lib/utils"
)

type AddHostForm struct {
	Uid         string `form:"uid" json:"uid"`
	Ip          string `form:"ip" json:"ip"`
	GuaPort     int    `form:"guaPort" json:"guaPort"`
	Status      int    `form:"status" json:"status"`
	GuaProtocol string `form:"guaProtocol" json:"guaProtocol"`
	ClusterId   int64  `form:"clusterId,string" json:"clusterId,string"`
	BindUserID  int64  `form:"bindUserId,string" json:"bindUserId,string"`
	Account     string `form:"account" json:"account"`         // 账号
	Password    string `form:"password" json:"password"`       // 密码
	Description string `form:"description" json:"description"` // 描述信息
}

type SearchHostForm struct {
	Ip          string `form:"ip"`
	GuaProtocol string `form:"guaProtocol"`
	base.Page
}

type HostDto struct {
	HostInfo    tables.CapHost    `json:"hostInfo"`
	ClusterInfo tables.CapCluster `json:"clusterInfo"`
}

type AddClusterForm struct {
	Id              int64   `form:"id,string" json:"id,string"`
	Name            string  `form:"name"`
	CpuThreshold    float64 `form:"cpuThreshold"`
	MemoryThreshold float64 `form:"memoryThreshold"`
	MaxSessionTime  int     `form:"maxSessionTime"`
	SessionOutTime  int     `form:"sessionOutTime"`
	TimeOutAction   int     `form:"timeOutAction"` // 1-注销会话 ，2-断开会话
	ClusterType     int     `form:"clusterType"`   // 集群类型：私有、抢占、共享
}

type ClusterDto struct {
	ClusterInfo tables.CapCluster `json:"clusterInfo"`
	HostList    []tables.CapHost  `json:"hostList"`
}

type AddLinkDto struct {
	UserId    int64 `json:"userId,string"`   // 归属人
	SourceId  int64 `json:"sourceId,string"` // 源ID，配合LinkType标记连接类型
	CertifyId int64 `json:"certifyId,string"`

	MetaData string `json:"metaData"` // 附加的元信息，非结构化数据，根据 linkType 解析数据
}

type LinkDto struct {
	LinkInfo tables.CapLink `json:"linkInfo"`
	Name     string         `json:"name"`
	Img      string         `json:"img"`
	Protocol string         `json:"protocol"`
	Title    string         `json:"title"`
	Subtitle string         `json:"subtitle"`
}

type AddSessionForm struct {
	LinkId int64 `form:"linkId,string" json:"linkId,string"`
}

type SearchSessionForm struct {
	Protocol  string `form:"protocol"`         // 连接协议,可选 rdp vnc ssh
	HostId    int64  `form:"hostId,string"`    // 前端为带搜索的下拉选
	Status    int    `form:"status"`           // 会话状态 。1-初始化；2-握持中，可以被管理；3-断开，未注销；4-已注销；
	StartTime int64  `form:"startTime,string"` //  会话时间，按创建的开始和结束时间计算
	EndTime   int64  `form:"endTime,string"`
	base.Page
}

// OpenLinkDto 打开链接需要使用的参数
type OpenLinkDto struct {
	LinkId    int64 `form:"linkId,string" json:"linkId,string"`       // 资源id
	SessionId int64 `form:"sessionId,string" json:"sessionId,string"` // 会话ID
	// 其他可能会用到的参数
	Width  string `form:"width" json:"width"`
	Height string `form:"height" json:"height"`
	Dpi    string `form:"dpi" json:"dpi"`
}
type SearchCertifyForm struct {
	Account string `form:"account" json:"account"`
	Type    string `form:"type" json:"type"`
	base.Page
}
type AddCertifyForm struct {
	Type        string `form:"type"`                                   // 凭证类型，
	SourceId    int64  `form:"sourceId,string" json:"sourceId,string"` // 源ID，配合Type标记指向，例如 linux-hostId
	Account     string `form:"account"`                                // 账号
	Password    string `form:"password"`                               // 密码
	Description string `form:"description" json:"description"`         // 描述信息
}

type AppCollectDto struct {
	AppInfo     tables.CapAppCollect `json:"appInfo"`
	HostInfo    tables.CapHost       `json:"hostInfo"`
	ClusterInfo tables.CapCluster    `json:"clusterInfo"`
}

// cap 应用发布参数
type AppIssueForm struct {
	UserIds   utils.StringArrayInt64 `json:"userIds" json:"userIds"`
	ClusterId int64                  `json:"clusterId,string" json:"clusterId"`
	AppName   string                 `json:"appName"`
	ExePath   string                 `json:"exePath"` // 应用实际执行文件的路径
	AppParams string                 `json:"appParams"`
	WorkSpace string                 `json:"workSpace"`
	Icon      string                 `json:"icon"`
	IsSingle  bool                   `json:"isSingle"` // 是否为单例
}

type CountKv struct {
	K   int64 `json:"k"`
	Num int64 `json:"num"`
}

type VmAppParams struct {
	Username string `json:"username"`
	Password string `json:"password"`
	Domain   string `json:"domain"`
	RunAs    bool   `json:"runAs"`

	AppName       string   `json:"appName"`
	HostSessionId int64    `json:"hostSessionId,string"`
	LinkId        int64    `json:"linkId,string"`
	ExePath       string   `json:"exePath"`
	WorkDir       string   `json:"workDir"`
	Params        []string `json:"params"`
}
